var fs = require('fs');
var path = require('path');
var COS = require('./index');
var util = require('./util');
var models = require('../db/db');
var config = require('./config');
var mysql = require('mysql');
var $sql = require('../db/sqlMap');

// var conn = mysql.createConnection(models.mysql);

// conn.connect();

var cos = new COS({
  // 必选参数
  SecretId: config.SecretId,
  SecretKey: config.SecretKey,
  // 可选参数
  FileParallelLimit: 3,    // 控制文件上传并发数
  ChunkParallelLimit: 3,   // 控制单个文件下分片上传并发数
  ChunkSize: 1024 * 1024,  // 控制分片大小，单位 B
});

function putObject(filename,req) {
  // 普通整体上传
  var filepath = path.join(__dirname, "../upload/" ,filename)
  util.createFile(filepath, 1024 * 1024, function (err) {
      // 调用方法
      cos.putObject({
          Bucket: config.Bucket, /* 必须 */ // Bucket 格式：test-1250000000
          Region: config.Region,
          Key: filename, /* 必须 */
          TaskReady: function (tid) {
              TaskId = tid
          },
          onProgress: function (progressData) {
              console.log(JSON.stringify(progressData));
          },
          // 格式1. 传入文件内容
          Body: fs.readFileSync(filepath),
          // 格式2. 传入文件流，必须需要传文件大小
        //   Body: fs.createReadStream(filepath),
        //   ContentLength: fs.statSync(filepath).size
      }, function (err, data) {
          console.log(err || data)
          fs.exists(filepath,function(exists){//判断文件是否存在
            if(exists){
                fs.unlink(filepath,function(err){//filepath：文件绝对路径,上传成功后删除upload文件夹内容
                    if(err){
                        console.log(err)
                    }
                })
            }
          })
          readFileList(path.resolve(__dirname,'../upload_tmp/'))//删除流文件
        //   更新表imgUrl字段
          var sql_update = $sql.user.update_user
          sql_update += " imgUrl = '" + data.Location + "'" + " where id =" + req.cookies.id
          conn.query(sql_update, req.cookies.id, function(err, result) {
            if (err) {
                console.log(err);
            }
            console.log(result);
            if (result.affectedRows === undefined) {
                console.log('失败')
            } else {
                console.log('成功')
            }
        })
          console.log(sql_update,'sql_update')
      });
  });
}

function readFileList(paths) {
// 遍历upload_tmp文件夹里面的所有流文件，待所有流读取到upload文件夹完毕再删除
  var files = fs.readdirSync(paths)
  files.forEach(function (itm, index) {
      var stat = fs.statSync(path.join(paths,itm))
      if (stat.isDirectory()) {
        //递归读取文件夹
          readFileList(paths + itm + "/")
      } else {
         // 删除流文件
          fs.unlink(path.join(paths , itm),function(err){
            if (err){
              return console.log(err)
            }
          })
      }
  })
}

function sliceUploadFile(filename) {
    // 分段上传，不适合多文件上传
    var filepath = path.join(__dirname, "../upload/" ,filename)
    util.createFile(filepath, 1024 * 1024 * 10, function (err) {
        // 调用方法
        cos.sliceUploadFile({
            Bucket: config.Bucket, /* 必须 */ // Bucket 格式：test-1250000000
            Region: config.Region,
            Key: filename, /* 必须 */
            FilePath: filepath, /* 必须 */
            TaskReady: function (tid) {
                TaskId = tid;
            },
            onHashProgress: function (progressData) {
                console.log(JSON.stringify(progressData))
            },
            onProgress: function (progressData) {
                console.log(JSON.stringify(progressData))
            },
        }, function (err, data) {

            // console.log(err || data)
            fs.unlink(filepath,function(err){//filepath：文件绝对路径,上传成功后删除upload文件夹内容
                if(err){
                    console.log(err)
                }
            })
            readFileList(path.resolve(__dirname,'../upload_tmp/'))//删除流文件
        });
    });
}

module.exports = putObject